package com.zhc.dejingapi.utils.qing;

//import com.alibaba.fastjson.JSON;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.gson.Gson;
import com.zhc.dejingapi.entity.ProductUnitEntity;
import com.zhc.dejingapi.entity.QingAppfieldsEntity;
import com.zhc.dejingapi.mapper.QingAppfieldsMapper;
import com.zhc.dejingapi.mapper.QingAppfieldtablevaluesMapper;
import com.zhc.dejingapi.pojo.qingflow.QingflowApiInfo;
import com.zhc.dejingapi.pojo.qingflow.appdata.adddata.*;
import com.zhc.dejingapi.pojo.qingflow.appdata.deldata.QingDelDataModel;
import com.zhc.dejingapi.pojo.qingflow.appdata.editdata.QingEditDataFieldModel;
import com.zhc.dejingapi.pojo.qingflow.appdata.editdata.QingEditDataFieldValueModel;
import com.zhc.dejingapi.pojo.qingflow.appdata.editdata.QingEditDataModel;
import org.apache.commons.beanutils.PropertyUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class QingDataUploadUtils {

    private static final Logger log = LoggerFactory.getLogger(ProductUnitUploadUtils.class);

    public QingDataUploadUtils(QingflowApiInfo qqingflowApiInfo1, JdbcTemplate mysqlJdbcTemplate1,
                               QingAppfieldsMapper qingAppfieldsMapper1,
                               QingAppfieldtablevaluesMapper qingAppfieldTableValuesMapper1,
                               Map<String,String> mapContrastFields1,
                               String  strErpTableName)throws Exception{

        this.qqingflowApiInfo=qqingflowApiInfo1;
        this.mysqlJdbcTemplate=mysqlJdbcTemplate1;
        this.qingAppfieldsMapper=qingAppfieldsMapper1;
        this.qingAppfieldtablevaluesMapper = qingAppfieldTableValuesMapper1;
        this.mapContrastFields=mapContrastFields1;
        if (!(strErpTableName==null||strErpTableName.isEmpty())){
            this.erpTableName=strErpTableName;
        }
        //LoadContrastFields();
        LoadInfo();
    }


    private Map<String,String> mapContrastFields=null;

    private String erpTableName="productunit";
    private Long appMainId;
    private String appKey;
    private JdbcTemplate mysqlJdbcTemplate;
    private QingflowApiInfo qqingflowApiInfo;

    private QingAppfieldsMapper qingAppfieldsMapper;

    private QingAppfieldtablevaluesMapper qingAppfieldtablevaluesMapper;


    private List<QingAppfieldsEntity> listFields=null;

//    private void LoadContrastFields(){
//        mapContrastFields=new java.util.HashMap<>();
//        mapContrastFields.put("单位编码","unitCode");
//        mapContrastFields.put("单位名称","unitName");
//        mapContrastFields.put("标识码","eri");
//        //mapContrastFields.put("状态","");
//        mapContrastFields.put("备注","unitEName");
//    }

    private void LoadInfo() throws Exception{


        String strSql="SELECT appMainId\n" +
                "from  appinferpinfocontrast\n" +
                "where erpTableName=?";
        appMainId=mysqlJdbcTemplate.queryForObject(strSql,Long.class,erpTableName);
        if (appMainId==null){
            throw new Exception("ERP表名"+erpTableName+"没有找到对应的appMainId");
        }
        strSql="SELECT appKey\n" +
                "from qing_appinfo\n" +
                "where main_id=?";
        appKey=mysqlJdbcTemplate.queryForObject(strSql,String.class,appMainId);
        if (appKey==null||appKey.isEmpty()){
            throw new Exception("ERP表名"+erpTableName+"没有找到对应的appKey");
        }

        QueryWrapper<QingAppfieldsEntity> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("appMain_Id",appMainId)
                .gt("queId",1000000);


        listFields=qingAppfieldsMapper.selectList(queryWrapper);
        if (listFields==null||listFields.isEmpty()){
            throw new Exception("ERP表名"+erpTableName+"没有找到对应的字段信息");
        }


    }

    public QingAddDataResultMain AddEntity(ProductUnitEntity entity){
        QingAddDataResultMain resultMain=null;

        try{

            QingAddDataModel qingAddDataModel =new QingAddDataModel();

            QingAddDataUserModel dataUserModel=new QingAddDataUserModel();
            dataUserModel.setMobile(qqingflowApiInfo.getUserMobile());
            dataUserModel.setEmail(qqingflowApiInfo.getUserEmail());
            dataUserModel.setAreaCode(qqingflowApiInfo.getUserAreacode());
            qingAddDataModel.setApplyUser(dataUserModel);


            List<QingAddDataFieldModel> listFieldModels=new ArrayList<>();
            for (int i = 0; i < listFields.size(); i++) {
                QingAppfieldsEntity sourceEntity=listFields.get(i);
                QingAddDataFieldModel addDataFieldModel=new QingAddDataFieldModel();
                QingAddDataFieldValueModel addDataFieldValueModel=new QingAddDataFieldValueModel();

                if (sourceEntity.getQueTitle().equals("状态")){
                    // 获取属性值，属性名为"myField"
                    //Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get("updAction"));

                    String StrAction="M";
                    StrAction=entity.getUpdAction();

                   // if(objValue==null||objValue.toString().isEmpty()){

                   // }
                    //else{
                    //    StrAction=objValue.toString();
                    //}
                    if (StrAction.toUpperCase().equals("D")){
                        addDataFieldModel=CopyAddData(sourceEntity,"已删除");
                    }
                    else{
                        addDataFieldModel=CopyAddData(sourceEntity,"可用");
                    }
                    listFieldModels.add(addDataFieldModel);
                }else {

                    String strTitle=sourceEntity.getQueTitle();
                    if(mapContrastFields.containsKey(strTitle)){
                        try{
                            // 获取属性值，属性名为"myField"
                            Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get(strTitle));

                            if(objValue==null){
                                //addDataFieldModel=CopyAddData(sourceEntity,"");
                            }
                            else{
                                addDataFieldModel=CopyAddData(sourceEntity,objValue.toString());
                            }

                            listFieldModels.add(addDataFieldModel);
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }

                    }
                    //for (String key : headParam.keySet()) {
                    //    httpDelete.setHeader(key,headParam.get(key));
                    //}
                }
//
//
//                if (sourceEntity.getQueTitle().equals("单位编码")){
//
//                    addDataFieldModel=CopyAddData(sourceEntity,entity.getCode());
//                    listFieldModels.add(addDataFieldModel);
//                }
//                else  if (sourceEntity.getQueTitle().equals("单位名称")){
//                    addDataFieldModel=CopyAddData(sourceEntity,entity.getName());
//                    listFieldModels.add(addDataFieldModel);
//                }
//                else  if (sourceEntity.getQueTitle().equals("说明")){
//                    addDataFieldModel=CopyAddData(sourceEntity,entity.getDescrip());
//                    listFieldModels.add(addDataFieldModel);
//                }
//                else  if (sourceEntity.getQueTitle().equals("状态")){
//                    if (entity.getUpdAction().toUpperCase().equals("D")){
//                        addDataFieldModel=CopyAddData(sourceEntity,"已删除");
//                    }
//                    else{
//                        addDataFieldModel=CopyAddData(sourceEntity,"可用");
//                    }
//                    listFieldModels.add(addDataFieldModel);
//                }
//                else  if (sourceEntity.getQueTitle().equals("标识码")){
//                    addDataFieldModel=CopyAddData(sourceEntity,entity.getEri());
//                    listFieldModels.add(addDataFieldModel);
//                }

                //listFieldModels.add(addDataFieldModel);
            }
            qingAddDataModel.setAnswers(listFieldModels);

            //转字符串
            //String strJson= JSON.toJSONString(qingAddDataModel);
            Gson gson = new Gson();
            String strJson=gson.toJson(qingAddDataModel);
            //获取返回结果
            resultMain= QingflowAPIUtils.AddDataToQing(qqingflowApiInfo,appKey,strJson);

//            if (resultMain==null){
//
//                entity.setErrCode("-10015");
//                entity.setErrMsg("服务器返回内容为空！");
//                entity.setLastRequestId(null);
//                entity.setIsDeal(0);
//                entity.setIsWaiting(0);
//                entity.setDealDate(LocalDateTime.now());
//                productUnitMapper.updateById(entity);
//
//            }
//            else{
//                if (resultMain.getErrCode()==0){
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg("提交成功！");
//                    entity.setLastRequestId(resultMain.getResult().getRequestId());
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(1);
//                    entity.setDealDate(LocalDateTime.now());
//                    entity.setActionResult("A");
//                    productUnitMapper.updateById(entity);
//
//                }
//                else{
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg(resultMain.getErrMsg());
//                    entity.setLastRequestId(null);
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(0);
//                    entity.setDealDate(LocalDateTime.now());
//                    productUnitMapper.updateById(entity);
//                }
//
//            }

        }
        catch (Exception e){
            e.printStackTrace();
            //throw  e;
        }
        return resultMain;
    }

    public QingAddDataResultMain UpdEntity(Object entity,String strActionResult){
        QingAddDataResultMain resultMain=null;
        try{
            //String strAccessToken=accessTokenUtils.getAccessToken(qqingflowApiInfo);

            QingEditDataModel qingEditDataModel =new QingEditDataModel();

            List<QingEditDataFieldModel> listFieldModels=new ArrayList<>();
            for (int i = 0; i < listFields.size(); i++) {
                QingAppfieldsEntity sourceEntity=listFields.get(i);
                QingEditDataFieldModel addDataFieldModel=new QingEditDataFieldModel();

                if (sourceEntity.getQueTitle().equals("状态")){
                    QingEditDataFieldValueModel addDataFieldValueModel=new QingEditDataFieldValueModel();
                    // 获取属性值，属性名为"myField"
                    Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get("updAction"));

                    String StrAction="M";
                    if(objValue==null||objValue.toString().isEmpty()){

                    }
                    else{
                        StrAction=objValue.toString();
                    }
                    if (StrAction.toUpperCase().equals("D")){
                        //addDataFieldModel=CopyAddData(sourceEntity,"已删除");
                        addDataFieldValueModel.setValue("已删除");
                    }
                    else{
                        //addDataFieldModel=CopyAddData(sourceEntity,"可用");
                        addDataFieldValueModel.setValue("可用");
                    }
                    List<QingEditDataFieldValueModel> listValues=new ArrayList<>();

                    listValues.add(addDataFieldValueModel);
                    addDataFieldModel.setQueId(sourceEntity.getQueId());
                    addDataFieldModel.setValues(listValues);
                }
                else{
                    String strTitle=sourceEntity.getQueTitle();
                    if(mapContrastFields.containsKey(strTitle)){
                        try {
                            // 获取属性值，属性名为"myField"
                            Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get(strTitle));
                            QingEditDataFieldValueModel addDataFieldValueModel = new QingEditDataFieldValueModel();

                            if(objValue==null){

                            }
                            else {
                                addDataFieldValueModel.setValue(objValue.toString());
                            }

                            List<QingEditDataFieldValueModel> listValues = new ArrayList<>();


                            listValues.add(addDataFieldValueModel);
                            addDataFieldModel.setQueId(sourceEntity.getQueId());
                            addDataFieldModel.setValues(listValues);
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }

                    }
                }

//                if (sourceEntity.getQueTitle().equals("单位编码")){
//                    QingEditDataFieldValueModel addDataFieldValueModel=new QingEditDataFieldValueModel();
//
//                    addDataFieldValueModel.setValue(entity.getCode());
//                    List<QingEditDataFieldValueModel> listValues=new ArrayList<>();
//
//
//                    listValues.add(addDataFieldValueModel);
//                    addDataFieldModel.setQueId(sourceEntity.getQueId());
//                    addDataFieldModel.setValues(listValues);
//                }
//                else  if (sourceEntity.getQueTitle().equals("单位名称")){
//                    QingEditDataFieldValueModel addDataFieldValueModel=new QingEditDataFieldValueModel();
//
//                    addDataFieldValueModel.setValue(entity.getName());
//                    List<QingEditDataFieldValueModel> listValues=new ArrayList<>();
//
//                    listValues.add(addDataFieldValueModel);
//                    addDataFieldModel.setQueId(sourceEntity.getQueId());
//                    addDataFieldModel.setValues(listValues);
//                }
//                else  if (sourceEntity.getQueTitle().equals("说明")){
//                    QingEditDataFieldValueModel addDataFieldValueModel=new QingEditDataFieldValueModel();
//
//                    addDataFieldValueModel.setValue(entity.getDescrip());
//                    List<QingEditDataFieldValueModel> listValues=new ArrayList<>();
//
//                    listValues.add(addDataFieldValueModel);
//                    addDataFieldModel.setQueId(sourceEntity.getQueId());
//                    addDataFieldModel.setValues(listValues);
//                }
//                else  if (sourceEntity.getQueTitle().equals("状态")){
//                    QingEditDataFieldValueModel addDataFieldValueModel=new QingEditDataFieldValueModel();
//
//                    addDataFieldValueModel.setValue(entity.getCode());
//
//                    if (entity.getUpdAction().toUpperCase().equals("D")){
//                        //addDataFieldModel=CopyAddData(sourceEntity,"已删除");
//                        addDataFieldValueModel.setValue("已删除");
//                    }
//                    else{
//                        //addDataFieldModel=CopyAddData(sourceEntity,"可用");
//                        addDataFieldValueModel.setValue("可用");
//                    }
//                    List<QingEditDataFieldValueModel> listValues=new ArrayList<>();
//
//                    listValues.add(addDataFieldValueModel);
//                    addDataFieldModel.setQueId(sourceEntity.getQueId());
//                    addDataFieldModel.setValues(listValues);
//                }


                listFieldModels.add(addDataFieldModel);
            }
            qingEditDataModel.setAnswers(listFieldModels);

            //转字符串
            //String strJson= JSON.toJSONString(qingEditDataModel);
            Gson gson = new Gson();
            String strJson=gson.toJson(qingEditDataModel);
            // 获取属性值，属性名为"myField"
            Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get("applyId"));

            String strApplyId="";
            if(objValue==null||objValue.toString().isEmpty()){

            }
            else{
                strApplyId=objValue.toString();
            }

            //获取返回结果
            resultMain= QingflowAPIUtils.UpdDataToQing(qqingflowApiInfo,appKey,strJson,strApplyId);

//            if (resultMain==null){
//
//                entity.setErrCode("-10015");
//                entity.setErrMsg("服务器返回内容为空！");
//                entity.setLastRequestId(null);
//                entity.setIsDeal(0);
//                entity.setIsWaiting(0);
//                entity.setDealDate(LocalDateTime.now());
//                productUnitMapper.updateById(entity);
//
//            }
//            else{
//                if (resultMain.getErrCode()==0){
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg("提交成功！");
//                    entity.setLastRequestId(resultMain.getResult().getRequestId());
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(1);
//                    entity.setDealDate(LocalDateTime.now());
//                    entity.setActionResult(strActionResult);
//                    productUnitMapper.updateById(entity);
//                    //增加马上判断的结果
//
//                }
//                else{
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg(resultMain.getErrMsg());
//                    entity.setLastRequestId(null);
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(0);
//                    entity.setDealDate(LocalDateTime.now());
//                    productUnitMapper.updateById(entity);
//                }
//
//            }

        }
        catch (Exception e){
            e.printStackTrace();
            //throw  e;
        }
        return resultMain;
    }

    public QingAddDataResultMain DelEntity(Object entity){
        QingAddDataResultMain resultMain=null   ;
        try{
            //String strAccessToken=accessTokenUtils.getAccessToken(qqingflowApiInfo);

            QingDelDataModel qingAddDataModel =new QingDelDataModel();

            List<Long> listDel=new ArrayList<>();

            //applyId
// 获取属性值，属性名为"myField"
            Object objValue = PropertyUtils.getProperty(entity, mapContrastFields.get("applyId"));

            String strApplyId="";
            long strApplyIdLong=0;
            if(objValue==null||objValue.toString().isEmpty()){

            }
            else{
                strApplyId=objValue.toString();
                try {
                    strApplyIdLong= Long.parseLong(strApplyId);
                }
                catch (Exception e){

                }

            }

            listDel.add(strApplyIdLong);

            qingAddDataModel.setApplyIds(listDel);
            //转字符串
            //String strJson= JSON.toJSONString(qingAddDataModel);
            Gson gson = new Gson();
            String strJson=gson.toJson(qingAddDataModel);
            //获取返回结果
            //qingflowApiInfo qingflowApiInfo, String appKey,String strBody
            resultMain= QingflowAPIUtils.DelDataToQing(qqingflowApiInfo,appKey,strJson);

//            if (resultMain==null){
//
//                entity.setErrCode("-10015");
//                entity.setErrMsg("服务器返回内容为空！");
//                entity.setLastRequestId(null);
//                entity.setIsDeal(0);
//                entity.setIsWaiting(0);
//                entity.setDealDate(LocalDateTime.now());
//                productUnitMapper.updateById(entity);
//
//            }
//            else{
//                if (resultMain.getErrCode()==0){
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg("提交成功！");
//                    entity.setLastRequestId(resultMain.getResult().getRequestId());
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(1);
//                    entity.setDealDate(LocalDateTime.now());
//                    entity.setActionResult("D");
//                    productUnitMapper.updateById(entity);
//                    //增加马上判断的结果
//
//                }
//                else{
//                    entity.setErrCode(resultMain.getErrCode().toString());
//                    entity.setErrMsg(resultMain.getErrMsg());
//                    entity.setLastRequestId(null);
//                    entity.setIsDeal(0);
//                    entity.setIsWaiting(0);
//                    entity.setDealDate(LocalDateTime.now());
//                    productUnitMapper.updateById(entity);
//                }
//
//            }

        }
        catch (Exception e){
            e.printStackTrace();
            //throw  e;
        }
        return resultMain;
    }


    public QingAddDataFieldModel CopyAddData(QingAppfieldsEntity fieldEntity,String fieldSetValue){
        QingAddDataFieldModel addDataFieldModel=new QingAddDataFieldModel();

        QingAddDataFieldValueModel addDataFieldValueModel=new QingAddDataFieldValueModel();
        //"dataValue": "可用",
        addDataFieldValueModel.setDataValue(fieldSetValue);
        //"email": null,
        addDataFieldValueModel.setEmail(fieldEntity.getValueEmail());
        //"id": null,
        addDataFieldValueModel.setId(fieldEntity.getValueId());
        //"optionId": null,
        addDataFieldValueModel.setOptionId(fieldEntity.getValueOptionid());
        //"ordinal": null,
        addDataFieldValueModel.setOrdinal(fieldEntity.getValueOrdinal());
        //"otherInfo": null,
        addDataFieldValueModel.setOtherInfo(fieldEntity.getValueOtherinfo());
        //"pluginValue": null,
        addDataFieldValueModel.setPluginValue(fieldEntity.getValuePluginvalue());
        //"queId": 208482472,
        addDataFieldValueModel.setQueId(fieldEntity.getValueQueid());
        //"value": "可用"
        addDataFieldValueModel.setValue(fieldSetValue);


        List<QingAddDataFieldValueModel> list=new ArrayList<>();
        list.add(addDataFieldValueModel);

        //"queId": 208482493,
        addDataFieldModel.setQueId(fieldEntity.getQueId());
        //"queTitle": "分类编号",
        addDataFieldModel.setQueTitle(fieldEntity.getQueTitle());
        //"queType": "2",
        addDataFieldModel.setQueType(fieldEntity.getQueType());
        //"values":
        addDataFieldModel.setValues(list);

        return addDataFieldModel;
    }

}
